package com.roamer.school.repository.entity.sys;


import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.roamer.school.repository.entity.BaseEntity;
import com.roamer.school.repository.enums.UserStatusEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Set;

/**
 * 用户主体信息
 *
 * @author roamer
 * @version V1.0
 * @date 2018/12/26 21:21
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_user")
public class SysUser extends BaseEntity<SysUser> {
    private static final long serialVersionUID = 1L;

    /**
     * 用户名
     * <p>唯一约束</p>
     */
    private String username;

    /**
     * 密码
     * <p>
     * {@link JsonProperty.Access } access 用于设置序列化时机
     */
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;

    /** 加密盐 */
    private String salt;

    /** 昵称 */
    private String nickname;

    /**
     * 用户状态
     * <ul>
     * <li>0:创建未认证（比如没有激活等）--等待验证的用户
     * <li>1:正常状态
     * <li>2：用户被锁定
     * </ul>
     */
    private UserStatusEnum status;

    /**
     * 角色ID
     * <p>
     * {@link SysRole} 需通过 {@link UserRoleRelation} 查询
     */
    @TableField(exist = false)
    private Set<Long> roleIdList;

    /**
     * 获取加密salt
     *
     * @return username + salt
     */
    public String getCredentialsSalt() {
        return username.concat(salt);
    }
}
